
 /**
 * 上海中赢金融信息服务有限公司
 * Copyright (c) 2017-2027 Chinazyjr,Inc.All Rights Reserved.
 */
package com.sys.midware.redis.core.operation;

import java.util.Set;

/**
 * <b>Description：</b> TODO <br/>
 * <b>ClassName：</b> SetOperations <br/>
 * <b>@author：</b> jackyshang <br/>
 * <b>@date：</b> 2016年8月22日 下午4:01:33 <br/>
 * <b>@version: </b>  <br/>
 */
public interface SetOperations {
    /**
     * 设置Set
     * putList <br/> 
     * @param key
     * @param values
     * @return  Long <br/>
     */
    public  <K,V> Long putSet(K key, Set<V> values) ;
    
    /**
     * 获取所有集合
     * getFromSet <br/> 
     * @param key
     * @return  List<V> <br/>
     */
    public <K,V> Set<V> getFromSet(K key);
    /**
     * 移除数据
     * remove <br/> 
     * @param key
     * @param values
     * @return  Long <br/>
     */
    public <K> Long remove(K key, Object... values);
    /**
     * 取集合大小
     * size <br/> 
     * @param key
     * @return  Long <br/>
     */
    public <K> Long size(K key);
    /**
     * 新增数据
     * add <br/> 
     * @param key
     * @param values
     * @return  Long <br/>
     */
    public <K> Long add(K key, Object... values);
    /**
     * 
     * 随机取出一个元素 <br/> 
     * get <br/> 
     * @param key
     * @return  V <br/>
     */
    public <K,V> V pop(K key);
    /**
     * 校验元素是否是成员
     * isMember <br/> 
     * @param key
     * @param o
     * @return  Boolean <br/>
     */
    public <K> Boolean isMember(K key, Object o);
    
 
    
    /**
     * 取差集
     * difference <br/> 
     * @param key
     * @param otherKey
     * @return  Set<V> <br/>
     */
    public <K,V> Set<V> difference(Object... keys);
//    /**
//     * 取多个key
//     * difference <br/> 
//     * @param key
//     * @param otherKeys
//     * @return  Set<V> <br/>
//     */
//    public <K,V>  Set<V> difference(K key, Collection<K> otherKeys);
    
    
    /**
     * 取两个key-set之间的并集
     * union <br/> 
     * @param key
     * @param otherKey
     * @return  Set<V> <br/>
     */
    public <K,V> Set<V> union(Object... keys);
//    /**
//     * 取并集
//     * union <br/> 
//     * @param key
//     * @param otherKeys
//     * @return  Set<V> <br/>
//     */
//    public <K,V> Set<V> union(K key, Collection<K> otherKeys);
}
